#ifndef __LJMU_MY_GAMEAPP_H_
#define __LJMU_MY_GAMEAPP_H_

#include "cljmudx10baseapp.h"

#include "OISInputManager.h"
#include "OISException.h"
#include "OISKeyboard.h"
#include "OISMouse.h"
#include "OISEvents.h"
#include "mycarobject.h"
#include "util_gametimer.h"

#include <iostream>
#include <vector>
#include <sstream>

using namespace OIS;


class CMyDX10GameApp :	public CDX10BaseApplication
{
public:
	//---------CONSTRUCTORS/DESTRUCTORS-----------------------------------------------
	CMyDX10GameApp(void): CDX10BaseApplication(){}		//Standard Constructor - We Have No Dynamic Data so nothing to Initialise
	virtual ~CMyDX10GameApp(void){}						//Standard Destructor - We Have No Dynamic Data so nothing to cleanup

	//---------METHOD OVERRIDES-------------------------------------------------------
	//Concrete Implementation of our Windows Callback function, needs to handle other types of messages
	virtual LRESULT CALLBACK customWndProc(HWND pwindowhandle, UINT pmessagetype, WPARAM pwparam, LPARAM plparam);
	//Concrete Implementation of our Initialise Method, used to load game content for our game
	virtual bool customInit();
	//Concrete Implementation of our Update Method, used to apply game logic rules and perform sub-component processing
	//such as Audio, AI, Collision Detection, Physics, UI, Character and Sprite Movement etc.
	virtual bool customUpdate();										
	//Concrete Implementation of our Render Method, used to draw our game objects to screen	
	virtual bool customRender();
	//Concrete Implementation of our Cleanup Method, used to destroy dynamic data and unload objects such as textures.
	virtual bool customCleanup();

private:
	//-------CLASS MEMBERS------------------------------------------------------------
	InputManager*		_obj_inputman;		//OIS Input Manager
	Keyboard*			_obj_keyboard;		//OIS Keyboard
	Mouse*				_obj_mouse;			//OIS Mouse
	LJMUUtilGameTimer   _obj_timer;			//Timer.
	CMyCarObject*		_car_object;		//Car Object.
	CMyGameObject*		_level;				//Level Object
	
};
#endif

